repo: Drop internal GFile config_file
authorColin Walters <walters@verbum.org>
Fri, 5 Aug 2016 01:49:05 +0000 (21:49 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Fri, 5 Aug 2016 08:26:07 +0000 (08:26 +0000)
The remote parsing code still uses GFiles but this is a start.

Closes: #432
Approved by: giuseppe

src/libostree/ostree-repo.c

index e9966b5f0714a4a021ecef3f35c8c25bbaa788f5..27b16fe2f4d9800160a6c29cf31b728adb143930 100644 (file)
@@ -526,7 +526,6 @@ ostree_repo_finalize (GObject *object)
   g_clear_object (&self->uncompressed_objects_dir);
   if (self->uncompressed_objects_dir_fd != -1)
     (void) close (self->uncompressed_objects_dir_fd);
-  g_clear_object (&self->config_file);
   g_clear_object (&self->sysroot_dir);
   g_free (self->remotes_config_dir);
 
@@ -613,7 +612,6 @@ ostree_repo_constructed (GObject *object)
 
   self->deltas_dir = g_file_get_child (self->repodir, "deltas");
   self->uncompressed_objects_dir = g_file_get_child (self->repodir, "uncompressed-objects-cache");
-  self->config_file = g_file_get_child (self->repodir, "config");
 
   /* Ensure the "sysroot-path" property is set. */
   if (self->sysroot_dir == NULL)
@@ -905,8 +903,9 @@ ostree_repo_write_config (OstreeRepo *self,
   g_return_val_if_fail (self->inited, FALSE);
 
   data = g_key_file_to_data (new_config, &len, error);
-  if (!g_file_replace_contents (self->config_file, data, len, NULL, FALSE, 0, NULL,
-                                NULL, error))
+  if (!glnx_file_replace_contents_at (self->repo_dir_fd, "config",
+                                      (guint8*)data, len, 0,
+                                      NULL, error))
     goto out;
 
   g_key_file_free (self->config);
@@ -983,17 +982,9 @@ impl_repo_remote_add (OstreeRepo     *self,
     }
   else if (remote != NULL)
     {
-      GFile *file;
-
-      if (remote->file != NULL)
-        file = remote->file;
-      else
-        file = self->config_file;
-
       g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
                    "Remote configuration for \"%s\" already exists: %s",
-                   name, gs_file_get_path_cached (file));
-
+                   name, remote->file ? gs_file_get_path_cached (remote->file) : "(in config)");
       goto out;
     }
 
@@ -2159,11 +2150,20 @@ ostree_repo_open (OstreeRepo    *self,
     }
 
   self->config = g_key_file_new ();
-  if (!g_key_file_load_from_file (self->config, gs_file_get_path_cached (self->config_file), 0, error))
-    {
-      g_prefix_error (error, "Couldn't parse config file: ");
+
+  { g_autofree char *contents = NULL;
+    gsize len;
+
+    contents = glnx_file_get_contents_utf8_at (self->repo_dir_fd, "config", &len,
+                                               NULL, error);
+    if (!contents)
       goto out;
-    }
+    if (!g_key_file_load_from_data (self->config, contents, len, 0, error))
+      {
+        g_prefix_error (error, "Couldn't parse config file: ");
+        goto out;
+      }
+  }
   if (!add_remotes_from_keyfile (self, self->config, NULL, error))
     goto out;